﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using zeus.Core;
using zeus.Core.RepositoryInterfaces;
using SharpArch.Data.NHibernate;
using NHibernate;
using NHibernate.Transform;
using NHibernate.Criterion;

namespace zeus.Data
{
    public class GrupoUsuarioRepository : Repository<GrupoUsuario>, IGrupoUsuarioRepository
    {
        /// <summary>
        /// Eliminar todos los items
        /// </summary>
        /// <param name="grupo"></param>
        public void DeleteAll(Grupo grupo)
        {
            // Eliminar todos los grupos
            foreach (var item in grupo.GrupoUsuarios)
            {
                Session.Delete(item);
            }

            grupo.GrupoUsuarios.Clear();
            Session.Flush();
        }
                
        /// <summary>
        /// Recuperar todos los grupos al que pertenece el usuario 
        /// </summary>
        /// <param name="usuario"></param>
        /// <returns></returns>
        public IList<Grupo> GetByUsuario(Usuario usuario)
        {
            return Session.CreateCriteria<Grupo>()
                .CreateCriteria("GrupoUsuarios")                   
                .Add(Restrictions.Eq("Usuario.Id", usuario.Id))
                .List<Grupo>();
        }

        public IList<Grupo> GetByCliente(int clienteId)
        {
            return Session.CreateCriteria<Grupo>()
                .Add(Restrictions.Eq("CodigoCliente", clienteId))
                .List<Grupo>();
        }


    }
}
